# 检测操作系统
ifeq ($(OS),Windows_NT)
	# Windows 环境
	RM = del /q /f
	RMDIR = rmdir /s /q
	MKDIR = if not exist "$(1)" mkdir $(1)
	TARGET_EXT = .exe
else
	# Linux/Unix 环境
	RM = rm -f
	RMDIR = rm -rf
	MKDIR = mkdir -p $(1)
	TARGET_EXT =
endif

# 编译器设置
CC = gcc
CFLAGS = -Iinc -Iui -Wall -Wextra

# 目录设置
SRC_DIR = src
UI_DIR = ui
OBJ_DIR = obj

# 源文件列表（自动获取src目录下所有.c文件 + main.c）
SRC_FILES = $(wildcard $(SRC_DIR)/*.c) $(wildcard $(UI_DIR)/*.c) main.c

# 目标文件列表（将.c替换为.o并添加obj目录前缀）
OBJ_FILES = $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(SRC_FILES)))

# 最终目标名称
TARGET = main$(TARGET_EXT)

# VPATH设置帮助make在不同目录查找源文件
VPATH = $(SRC_DIR):$(UI_DIR):.

# 默认目标
all: $(OBJ_DIR) $(TARGET)

# 链接可执行文件
$(TARGET): $(OBJ_FILES)
	$(CC) $^ -o $@

# 编译规则（处理src目录和当前目录的.c文件）
$(OBJ_DIR)/%.o: %.c | $(OBJ_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

# 创建目标目录
$(OBJ_DIR):
	$(call MKDIR,$(OBJ_DIR))

# 清理构建产物
clean:
	@echo "Cleaning build artifacts..."
	@if "$(OBJ_DIR)" NEQ "" if exist "$(OBJ_DIR)" $(RMDIR) "$(OBJ_DIR)"
	@if "$(TARGET)" NEQ "" if exist "$(TARGET)" $(RM) "$(TARGET)"

.PHONY: all clean